﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

//int main()
//{
//	int a = 10;//int == signed int
//	//0 0000000000000000000000000001010 - 原码
//	//0 0000000000000000000000000001010 - 反码
//	//0 0000000000000000000000000001010 - 补码
//
//	return 0;
//}

//
//int main()
//{
//	int a = -10;
//	//1 0000000000000000000000000001010 - 原码
//	//1 1111111111111111111111111110101 - 反码//取反
//	//1 1111111111111111111111111110110 - 补码//+1
//	//1 0000000000000000000000000001001 //取反
//	//1 0000000000000000000000000001010 - 原码
//
//	return 0;
//}

//1-1
//1+(-1)
//00000000000000000000000000000001 //原码 反码 补码
//10000000000000000000000000000001 //原码
//11111111111111111111111111111110 //反码
//11111111111111111111111111111111 //补码


//左移 左边丢弃右边补零  2^n //将操作数的所有位向左移动指定的位数。左移 n 位相当于乘以 2 的 n 次方。
//int main()
//{
//	int num = 10;
//  00000000000000000000000000001010
//	int r = num << 3;
//	printf("r=%d\n", r);
//	printf("num=%d\n", num);
//
//	return 0;
//}

//int main()
//{
//	int num = -10;
//	//10000000000000000000000000001010
//	//11111111111111111111111111110110 -补码
//	int r = num << 1;
//	//11111111111111111111111111101100 -补码
//	//10000000000000000000000000010100 -原码
//	printf("r=%d\n", r);
//	printf("num=%d\n", num);
//
//	return 0;
//}

//右移  //将操作数的所有位向右移动指定的位数。右移n位相当于除以 2 的 n 次方。
//int main()
//{
//	int n = -10;
//	//11111111111111111111111111110110 -补码
//	int m = n >> 1;
//	// >>1  
//	//11111111111111111111111111111011
//	//算术右移  用符号位填充
//	//逻辑右移  用0填充
//	printf("m=%d\n", m);
//	printf("n=%d\n", n);
//
//
//	return 0;
//}

//int main()
//{
//	int a = 3;
//	int b = 5;
//	a = a + b;
//	b = a - b;
//	a = a - b;
//	printf("a=%d\n", a);
//	printf("b=%d\n", b);
//
//	return 0;
//}

//int main()
//{
//	int a = 3;
//	int b = 5;
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//	printf("a=%d\n", a);
//	printf("b=%d\n", b);
//
//	return 0;
//}

//统计二进制有多少1
//int main()
//{
//	int num = 0;
//	int count = 0;
//	scanf("%d", &num);
//	while (num) {
//		if (num % 2 == 1) {
//			count++;
//		}
//		num /= 2;
//	}
//	printf("%d\n", count);
//	return 0;
//}
// 
//统计二进制有多少1
//int main()
//{
//	int num = 0;
//	int count = 0;
//	scanf("%d", &num);
//	for (int i = 0; i < 32; i++)
//	{
//		if (((num >> i) & 1) == 1) {
//			count++;
//		}
//	}
//	printf("%d\n", count);
//	return 0;
//}

//统计二进制有多少1
//int main()
//{
//	int num = 0;
//	int count = 0;
//	scanf("%d", &num);
//	while (num) {
//		num = num & (num - 1);
//		count++;
//	}
//	printf("count = %d\n", count);
//	return 0;
//}

//int main()
//{
//	int m = 13;
//	int n = 5;//二进制13第五位
//	m |= 1 << (n - 1);
//	printf("%d\n", m);//13+16
//	m &= ~(1 << (n - 1));
//	printf("%d\n", m);
//
//	return 0;
//}
//
//int main()
//{
//
//	int a = 1;
//	int b = 2;
//	int c = (a > b, a = b + 10, a, b = a + 1);//逗号表达式
//	printf("%d\n", c);
//	return 0;
//}


//int main()
//{
//	//sizeof的括号中有表达式的时候，是不参与计算的
//	short s = 10;
//	int n = 8;
//	printf("%zd\n", sizeof(s = n+9));
//	printf("s = %d\n", s);
//
//	return 0;
//}


//int main()
//{
//	int a = 1;
//	int b = 2;
//	int c = (a > b, a = b + 10, a, b = a + 1);
//	printf("c = %d\n", c);
//
//	return 0;
//}


//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	//              0 1 2 3 4 5 ...
//	arr[5];//[] - 下标引用操作符
//	//arr 5是[]的操作数
//	//
//	return 0;
//}
//
//int Add(int x, int y)
//{
//	return x + y;
//}
//
//void test()
//{
//
//}
//
//int main()
//{
//	test();
//	printf("hehe\n");  //() 是函数调用操作符,printf, "hehe\n" 是两个操作数
//	Add(3, 5); //Add 3 5 是三个操作数
//	return 0;
//}

//创建学生类型
//
//struct Stu
//{
//	//成员列表
//	char name[20];
//	int age;
//	double score;
//}s4, s5;//全局变量
//
////int double 
//
////全局变量
//struct Stu s3;
//
//int main()
//{
//	//int num;
//	//结构体变量 - 局部变量
//	struct Stu s1 = {"zhangsan", 20, 60.0};
//	//struct Stu s2 = {"lisi", 25, 85.5};
//	struct Stu s2 = { .age = 25, .name = "lisi", .score = 85.5};
//
//	return 0;
//}

//char<-128--127>  -1 -- -128 127 --- 0 256是'\0'
//#include<string.h>
//int main()
//{
//	char a[1000];
//	int i;
//	for (i = 0; i < 1000; i++)
//		a[i] = -1 - i;
//	printf("%d", strlen(a));//是255
//	return 0;
//}

int main()
{
	char a = 10;//00000000000000000000000000001010 //整型提升
	//00001010 --a
	char b = 120;//00000000000000000000000001111000
	//01111000 --b
	char c = a + b;
	//00000000000000000000000000001010
	//00000000000000000000000001111000
	//00000000000000000000000010000010
	//10000010 --c
	printf("%d", c);//14 因为 char 为有符号的 char  所以整形提升的时候，⾼位补充符号位，即1
	//11111111111111111111111110000010  补码
	//10000000000000000000000001111101
	//10000000000000000000000001111110  原码  -126
	return 0;
}